home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / TreeView.h < prev    next >
C/C++ Source or Header  |  1992-07-17  |  4KB  |  178 lines

  1. #ifndef TreeView_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define TreeView_First
  7.  
  8. #include "CompVObject.h"
  9. #include "DialogView.h"
  10.  
  11. class TreeNode;
  12.  
  13. enum TreeLayout {
  14.     eTLIndented,
  15.     eTLTopDown,
  16.     eTLLeftRight,
  17.     eTLNew
  18. };
  19.  
  20. enum TreeConnection {
  21.     eTCNone,
  22.     eTCDiagonal,
  23.     eTCPerpendicular,
  24.     eTCDiagonal2
  25. };
  26.  
  27. //---- TreeView ----------------------------------------------------------------
  28.  
  29. class TreeView: public DialogView {
  30. public:
  31.     MetaDef(TreeView);
  32.  
  33.     TreeView(EvtHandler*, TreeLayout lt= eTLLeftRight, 
  34.                     TreeConnection ct= eTCPerpendicular);
  35.  
  36.     VObject *DoCreateDialog();
  37.     void SetTree(TreeNode*, bool freeold= TRUE);
  38.     void SetExtent(Point e);
  39.     void Promote(TreeNode*);
  40.     virtual void Collapse(TreeNode*);
  41.     virtual void OpenTreeNode(TreeNode*, bool);
  42.     VObject *FindNode(VObject *);
  43.     TreeNode *GetTree()
  44.     { return tree; }
  45.  
  46.     //---- layout
  47.     void SetLayout(TreeLayout);
  48.     TreeLayout GetLayout()
  49.     { return layout; }
  50.     void SetConnType(TreeConnection);
  51.  
  52.     //---- event handling
  53.     Command *DispatchEvents(Point lp, Token &t, Clipper*);
  54.     virtual Command *NodeSelected(VObject*, int cl);
  55.     virtual Command *GetNodeSelector(TreeNode *tn, int cl);
  56.  
  57.     //---- input/output
  58.     OStream& PrintOn(OStream&);
  59.     IStream& ReadFrom(IStream&);
  60.     void Export(OStream&);
  61.     
  62.     //---- hooks for BuildTree
  63.     void InstallTree(Object *root);
  64.     VObject *BuildTree(Object *root);
  65.     virtual VObject *NodeAsVObject(Object *);
  66.     virtual Iterator *MakeChildrenIter(Object *);
  67.     virtual TreeNode *MakeTreeNode(int id, SeqCollection *items);
  68.  
  69.     //---- selection
  70.    virtual void SetSelection(VObject *gp);
  71.     VObject *GetSelection()
  72.     { return selection; }
  73.  
  74. public:
  75.     Point gap;
  76.     TreeLayout layout;
  77.     TreeConnection connType;
  78.     TreeNode *tree, *oldtree;
  79.     VObject *selection;
  80. };
  81.  
  82. struct line {
  83.     Point d;
  84.     line *link;
  85.     
  86.     line(Point dd, line *l)
  87.     { d= dd; link= l; }
  88.     void draw(Point pos);
  89. };
  90.  
  91. struct polygon {
  92.     struct {
  93.     line *head, *tail;
  94.     } lower, upper;
  95.  
  96.     polygon()
  97.     { lower.head= lower.tail= upper.head= upper.tail= 0; }
  98.     int merge(polygon *c2);
  99.     void draw(int h, Point pos);
  100.     Point bbox(int h);
  101.     int loffset();
  102. };
  103.  
  104. //---- TreeNode ------------------------------------------------------------------
  105.  
  106. enum TreeNodeFlags {
  107.     eTreeNodeCollapsed  =   BIT(eCompVObjLast+1),
  108.     eTreeNodeDefault    =   eCompVObjDefault,
  109.     eTreeNodeLast       =   eCompVObjLast+1
  110. };
  111.  
  112. class TreeNode: public CompositeVObject {
  113. public:
  114.     Point offset;
  115.     polygon contour;
  116. public:
  117.     MetaDef(TreeNode);
  118.  
  119.     TreeNode(int id= cIdNone, SeqCollection *cp= 0);
  120.     TreeNode(int id, ...);
  121.     TreeNode(int id, va_list ap);
  122.  
  123.     TreeView *GetTreeView();
  124.     bool Collapsed()
  125.     { return TestFlag(eTreeNodeCollapsed); }
  126.     void Open(bool);
  127.     void Collapse();
  128.     TreeConnection ConnType()
  129.     { return GetTreeView()->connType; }
  130.     TreeLayout Layout()
  131.     { return GetTreeView()->layout; }
  132.     Point Gap()
  133.     { return GetTreeView()->gap; }
  134.     VObject *Detect(BoolFun f, void *arg);
  135.     VObject *FindExpandedItem(VObject*);
  136.  
  137.     //---- layout
  138.     void SetOrigin(Point at);
  139.     void SetExtent(Point e);
  140.     Metric GetMinSize();
  141.  
  142.     int join();
  143.     int width()
  144.     { return At(0)->contentRect.extent.x; }
  145.     int height()
  146.     { return At(0)->contentRect.extent.y; }
  147.  
  148.     //---- drawing
  149.     void Draw(Rectangle);
  150.     void DrawConnections();
  151.     void Outline2(Point, Point);
  152.     void Highlight(HighlightState hst);
  153.     GrCursor GetCursor(Point lp);
  154.  
  155.     //---- event handling
  156.     Command *DispatchEvents(Point lp, Token &t, Clipper *cl);
  157.     Command *DoMiddleButtonDownCommand(Point lp, Token t, int cl);
  158.     Command *DoLeftButtonDownCommand(Point lp, Token t, int cl);
  159.  
  160.     //---- input/output
  161.     void Export(OStream &s, int level);
  162. };
  163.  
  164. //---- TreeNodeSelector -------------------------------------------------------------
  165.  
  166. class TreeNodeSelector: public Command {
  167.     TreeNode *item;
  168.     bool inside, lastinside;
  169.     int clicks;
  170. public:
  171.     TreeNodeSelector(TreeNode *s, int cl);
  172.     void TrackFeedback(Point, Point, bool);
  173.     Command *TrackMouse(TrackPhase, Point, Point, Point);
  174. };
  175.  
  176. #endif
  177.  
  178.